home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / BLOCK.I < prev    next >
Encoding:
Text File  |  1990-11-10  |  8.8 KB  |  3 lines

  1. ⓪ IMPLEMENTATION MODULE Block;⓪ (*$Y+*)⓪ ⓪ (*$L-,N+*)⓪ ⓪ (*⓪!*  Autor: Wolfgang Keller   (W.K)        Copyright (C) 1989⓪!*         Dieter   Hametner (D.H)⓪!*⓪!*  Erstellt: 23.08.89                  System: MEGAMAX Modula-2 V1.1⓪!*⓪!*  --------------------------------------------------------------------------⓪!*  Datum     Version   Autor   Arbeitsbericht⓪!*  --------------------------------------------------------------------------⓪!*  23.08.89 |  0001  |  W.K  | neues universelles ByteCopy implementiert.⓪!*              0005  |  W.K  | Clear implementiert.⓪!*                            | Ganzes Modul fertig ausgetestet.⓪!*              0007  |  T.T  | Clear: End-Löschen optimiert.⓪!*  30.08.89 |  0007  |  T.T  | Clear allg. korrigiert; Copy optimiert;⓪!*                              D3 wird nicht mehr zerstört⓪!*⓪!*  --------------------------------------------------------------------------⓪!*  Interne Modulversion V#0007#⓪!*  --------------------------------------------------------------------------⓪!*)⓪ ⓪ FROM SYSTEM IMPORT ASSEMBLER, ADDRESS;⓪ ⓪ ⓪ PROCEDURE Copy (from: ADDRESS; n: LONGCARD; to: ADDRESS);⓪"(*⓪#*  Kopiert 'n' Byte vom Adresse 'from' nach Adresse 'to' und⓪#*  berücksichtigt dabei Überschneidungen.⓪#*)⓪#⓪"BEGIN⓪$ASSEMBLER⓪)MOVE.L  -(A3),A1       ; A1 := to⓪)MOVE.L  -(A3),D0       ; D0 := n⓪)MOVE.L  -(A3),A0       ; A0 := from⓪ ⓪)MOVE.L  A1,D2⓪)SUB.L   A0,D2⓪)BLT.L   normcopy⓪)CMP.L   D0,D2⓪)BLT.L   revcopy⓪ ⓪ normcopy⓪)MOVE.L  A0,D1          ; D1 := ODD( from )⓪)AND.B   #1,D1          ;⓪)BNE     fromIsOdd⓪ ⓪)MOVE.L  A1,D1          ; D1 := ODD( to )⓪)AND.B   #1,D1          ;⓪)BNE.L   calcbytecopy⓪)BRA     calcmulticopy⓪ ⓪ fromIsOdd⓪)MOVE.L  A1,D1          ; D1 := ODD( to )⓪)AND.B   #1,D1          ;⓪)BNE     moveOneByte⓪)BRA.L   calcbytecopy⓪ ⓪ moveOneByte⓪)SUBQ.L  #1,D0⓪)BCS.W   ende⓪)MOVE.B  (A0)+,(A1)+⓪ ⓪ calcmulticopy⓪)MOVE.L  D0,D2          ; D2 := n⓪ ⓪)AND.W   #$FF,D0        ; D0 := n MOD 256⓪ ⓪@; D2 korrekt berechnet für multicopy⓪@; D0 restbytes⓪ ⓪)MOVE.W  D0,D1⓪)AND.W   #7,D1          ; D1 := n MOD 8   (Parameter für restcopy)⓪)LSR.W   #3,D0          ; D0 := n DIV 8   (Parameter für longcopy)⓪ ⓪)LSR.L   #8,D2          ; D2 := n DIV 256⓪ ⓪)BEQ.L   longcopy       ; Fall D2 = 0 gleich nach longcopy⓪ multicopy⓪)MOVEM.L D0-D1/D3-D7/A2-A6,-(A7)⓪)SWAP    D2⓪)MOVE.L  D2,-(A7)⓪)SWAP    D2⓪)BRA     startmulti⓪ ⓪ multiloop1⓪)MOVE.L  D2,(A7)⓪)SWAP    D2⓪ multiloop2⓪)MOVE.W  D2,(A7)⓪); 256 Byte kopieren⓪)MOVEM.L (A0)+,D0-D7/A2-A6     ; LOAD⓪)MOVEM.L D0-D7/A2-A6,(A1)      ; STORE⓪)ADDA.W  #52,A1⓪)MOVEM.L (A0)+,D0-D7/A2-A6     ; LOAD⓪)MOVEM.L D0-D7/A2-A6,(A1)      ; STORE⓪)ADDA.W  #52,A1⓪)MOVEM.L (A0)+,D0-D7/A2-A6     ; LOAD⓪)MOVEM.L D0-D7/A2-A6,(A1)      ; STORE⓪)ADDA.W  #52,A1⓪)MOVEM.L (A0)+,D0-D7/A2-A6     ; LOAD⓪)MOVEM.L D0-D7/A2-A6,(A1)      ; STORE⓪)ADDA.W  #52,A1⓪)MOVEM.L (A0)+,D1-D7/A2-A6     ; LOAD⓪)MOVEM.L D1-D7/A2-A6,(A1)      ; STORE⓪)ADDA.W  #48,A1⓪)MOVE.W  (A7),D2⓪ startmulti⓪)DBF     D2,multiloop2⓪)SWAP    D2⓪)MOVE.W  2(A7),D2⓪)DBF     D2,multiloop1⓪ ⓪)ADDQ.L  #4,A7⓪)MOVEM.L (A7)+,D0-D1/D3-D7/A2-A6⓪)BRA.L   longcopy⓪ ⓪ longloop⓪)MOVE.L  (A0)+,(A1)+    ; copy Longwords⓪)MOVE.L  (A0)+,(A1)+    ; copy Longwords⓪ longcopy DBF     D0,longloop⓪ ⓪)BRA     restcopy⓪ ⓪ calcbytecopy⓪)MOVE.W  D0,D1          ; D1 := n⓪)AND.W   #7,D1          ; D1 := n MOD 8⓪)LSR.L   #3,D0          ; D0 := n DIV 8⓪)BRA     bytecopy⓪ byteloop1⓪)SWAP    D0⓪ byteloop2⓪)MOVE.B  (A0)+,(A1)+⓪)MOVE.B  (A0)+,(A1)+⓪)MOVE.B  (A0)+,(A1)+⓪)MOVE.B  (A0)+,(A1)+⓪)MOVE.B  (A0)+,(A1)+⓪)MOVE.B  (A0)+,(A1)+⓪)MOVE.B  (A0)+,(A1)+⓪)MOVE.B  (A0)+,(A1)+⓪ bytecopy DBF     D0,byteloop2⓪)SWAP    D0⓪)DBF     D0,byteloop1⓪ ⓪)BRA     restcopy⓪ restloop MOVE.B  (A0)+,(A1)+⓪ restcopy DBF     D1,restloop⓪ ende     RTS                    ; ende von bytecopy⓪ ⓪ revcopy⓪)ADDA.L   D0,A1         ; to := to + n⓪)ADDA.L   D0,A0         ; from := from + n;⓪ ⓪)MOVE.L  A0,D1          ; D1 := ODD( from )⓪)AND.B   #1,D1          ;⓪)BNE     rfromIsOdd⓪ ⓪)MOVE.L  A1,D1          ; D1 := ODD( to )⓪)AND.B   #1,D1          ;⓪)BNE.L   rcalcbytecopy⓪)BRA     rcalcmulticopy⓪ ⓪ rfromIsOdd⓪)MOVE.L  A1,D1          ; D1 := ODD( to )⓪)AND.B   #1,D1          ;⓪)BNE     rmoveOneByte⓪)BRA.L   rcalcbytecopy⓪ ⓪ rmoveOneByte⓪)SUBQ.L  #1,D0⓪)BCS     ende⓪)MOVE.B  -(A0),-(A1)⓪ ⓪ rcalcmulticopy⓪)MOVE.L  D0,D2          ; D2 := n⓪ ⓪)AND.W   #$FF,D0        ; D0 := n MOD 256⓪ ⓪@; D2 korrekt berechnet für multicopy⓪@; D0 restbytes⓪ ⓪)MOVE.W  D0,D1⓪)AND.W   #7,D1          ; D1 := n MOD 8   (Parameter für restcopy)⓪)LSR.W   #3,D0          ; D0 := n DIV 8   (Parameter für longcopy)⓪ ⓪)LSR.L   #8,D2          ; D2 := n DIV 256⓪ ⓪)BEQ.L   rlongcopy       ; Fall D2 = 0 gleich nach longcopy⓪ rmulticopy⓪)MOVEM.L D0-D1/D3-D7/A2-A6,-(A7)⓪)SWAP    D2⓪)MOVE.L  D2,-(A7)⓪)SWAP    D2⓪)BRA     rstartmulti⓪)⓪ rmultiloop1⓪)MOVE.L  D2,(A7)⓪)SWAP    D2⓪ rmultiloop2⓪)MOVE.W  D2,(A7)⓪); 256 Byte kopieren⓪)SUBA.W  #52,A0⓪)MOVEM.L (A0),D0-D7/A2-A6       ; LOAD⓪)MOVEM.L D0-D7/A2-A6,-(A1)      ; STORE⓪)SUBA.W  #52,A0⓪)MOVEM.L (A0),D0-D7/A2-A6       ; LOAD⓪)MOVEM.L D0-D7/A2-A6,-(A1)      ; STORE⓪)SUBA.W  #52,A0⓪)MOVEM.L (A0),D0-D7/A2-A6       ; LOAD⓪)MOVEM.L D0-D7/A2-A6,-(A1)      ; STORE⓪)SUBA.W  #52,A0⓪)MOVEM.L (A0),D0-D7/A2-A6       ; LOAD⓪)MOVEM.L D0-D7/A2-A6,-(A1)      ; STORE⓪)SUBA.W  #48,A0⓪)MOVEM.L (A0),D1-D7/A2-A6       ; LOAD⓪)MOVEM.L D1-D7/A2-A6,-(A1)      ; STORE⓪)MOVE.W  (A7),D2⓪ rstartmulti⓪)DBF     D2,rmultiloop2⓪)SWAP    D2⓪)MOVE.W  2(A7),D2⓪)DBF     D2,rmultiloop1⓪ ⓪)ADDQ.L  #4,A7⓪)MOVEM.L (A7)+,D0-D1/D3-D7/A2-A6⓪)BRA.L   rlongcopy⓪ rlongloop⓪)MOVE.L  -(A0),-(A1)    ; copy Longwords⓪)MOVE.L  -(A0),-(A1)    ; copy Longwords⓪ rlongcopy DBF     D0,rlongloop⓪ ⓪)BRA     rrestcopy⓪ ⓪ rcalcbytecopy⓪)MOVE.W  D0,D1          ; D1 := n⓪)AND.W   #7,D1          ; D1 := n MOD 8⓪)LSR.L   #3,D0          ; D0 := n DIV 8⓪)BRA     rbytecopy⓪ rbyteloop1⓪)SWAP    D0⓪ rbyteloop2⓪)MOVE.B  -(A0),-(A1)⓪)MOVE.B  -(A0),-(A1)⓪)MOVE.B  -(A0),-(A1)⓪)MOVE.B  -(A0),-(A1)⓪)MOVE.B  -(A0),-(A1)⓪)MOVE.B  -(A0),-(A1)⓪)MOVE.B  -(A0),-(A1)⓪)MOVE.B  -(A0),-(A1)⓪ rbytecopy DBF     D0,rbyteloop2⓪)SWAP    D0⓪)DBF     D0,rbyteloop1⓪)⓪)BRA     rrestcopy⓪ rrestloop⓪)MOVE.B  -(A0),-(A1)⓪ rrestcopy DBF     D1,rrestloop⓪ ⓪$END;⓪"END Copy;⓪ ⓪ ⓪ PROCEDURE Clear (from: ADDRESS; n: LONGCARD);⓪"(*⓪#*  Löscht ab 'from' 'n' Byte.⓪#*)⓪"⓪"BEGIN⓪$ASSEMBLER⓪)MOVE.L  -(A3),D0       ; D0 := n⓪)MOVE.L  -(A3),A0       ; A0 := from⓪)BEQ     ende⓪)ADDA.L  D0,A0          ; A0 := from + n⓪ ⓪)MOVEQ.L #0,D2⓪ ⓪)MOVE.L  A0,D1          ; D1 := ODD( from )⓪)AND.B   #1,D1          ;⓪)BEQ     calcmulticlear⓪ ⓪ fromIsOdd⓪)MOVE.B  D2,-(A0)       ; Clear one byte⓪)SUBQ.L  #1,D0          ; jetzt ist A0 gerade !⓪)BRA     calcmulticlear⓪ ⓪ ende     RTS⓪ ⓪ calcmulticlear⓪)MOVE.L  D0,D1          ; D1 := n⓪ ⓪)AND.W   #$FF,D0        ; D0 := n MOD 256⓪@; in D0 sind also die restbytes⓪)LSR.L   #8,D1          ; D1 := n DIV 256⓪ ⓪)BEQ.L   calclongclear      ; Fall D1 = 0 gleich nach calclongclear⓪ ⓪ multiclear⓪)MOVEM.L D0/D3-D7/A3-A6,-(A7)⓪)MOVE.L  D2,D0⓪)MOVE.L  D2,D3⓪)MOVE.L  D2,D4⓪)MOVE.L  D2,D5⓪)MOVE.L  D2,D6⓪)MOVE.L  D2,D7⓪)MOVE.L  D2,A1⓪)MOVE.L  D2,A2⓪)MOVE.L  D2,A3⓪)MOVE.L  D2,A4⓪)MOVE.L  D2,A5⓪)MOVE.L  D2,A6⓪)BRA     startmulti⓪ ⓪ multiloop1⓪)SWAP    D1⓪ multiloop2⓪); clear 256 Byte⓪)MOVEM.L D0/D2-D7/A1-A6,-(A0)   ; 52⓪)MOVEM.L D0/D2-D7/A1-A6,-(A0)   ; 52⓪)MOVEM.L D0/D2-D7/A1-A6,-(A0)   ; 52⓪)MOVEM.L D0/D2-D7/A1-A6,-(A0)   ; 52⓪)MOVEM.L D2-D7/A1-A6,-(A0)      ; 48⓪ startmulti⓪)DBF     D1,multiloop2⓪)SWAP    D1⓪)DBF     D1,multiloop1⓪ ⓪)MOVEM.L (A7)+,D0/D3-D7/A3-A6⓪ ⓪ calclongclear                   ; Parameter in D0⓪)MOVE.W  D0,D1          ; D1 := n          die restlichen bytes⓪)AND.W   #7,D1          ; D1 := n MOD 8   (Parameter für restclear)⓪)LSR.W   #3,D0          ; D0 := n DIV 8   (Parameter für longclear)⓪)BRA     longclear⓪ ⓪ longloop⓪)MOVE.L  D2,-(A0)       ; copy Longwords⓪)MOVE.L  D2,-(A0)       ; copy Longwords⓪ longclear⓪)DBF     D0,longloop⓪ ⓪)BRA     restclear⓪ restloop⓪)MOVE.B  D2,-(A0)⓪ restclear⓪)DBF     D1,restloop⓪$END;⓪"END Clear;⓪ ⓪ ⓪ END Block.⓪ ə
  2. (* $FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173$FFEE3173Ç$000018FET........T.......T......T.......T.......T.......T.......T.......T.......T.......$00002039$00001FD7$00001FCB$000015FA$00000EF3$00000DC4$00001695$0000172D$000017C9$000018FE$00000439$0000002B$FFEDB15C$FFEDB15C$00000034$FFEE3173¶Çé*)
  3.